home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 June / PCWorld_2007-06_cd.bin / v cisle / tclock / tclocklight-040702-3.exe / source / dll / newapi.c < prev    next >
C/C++ Source or Header  |  2004-01-12  |  5KB  |  155 lines

  1. /*-------------------------------------------------------------
  2.   newapi.c : use new APIs after Win95
  3.   (C) 1997-2003 Kazuto Sato
  4.   Please read readme.txt about the license.
  5.   
  6.   Written by Kazubon, Nanashi-san
  7. ---------------------------------------------------------------*/
  8.  
  9. #include "tcdll.h"
  10. #include "newapi.h"
  11.  
  12. /* Globals */
  13.  
  14. void EndNewAPI(void);
  15. BOOL MyGradientFill(HDC hdc, PTRIVERTEX pVertex, ULONG dwNumVertex,
  16.     PVOID pMesh, ULONG dwNumMesh, ULONG dwMode);
  17. BOOL MyAlphaBlend(HDC hdcDest, int nXOriginDest, int nYOriginDest,
  18.     int nWidthDest, int nHeightDest,
  19.     HDC hdcSrc, int nXOriginSrc, int nYOriginSrc,
  20.     int nWidthSrc, int nHeightSrc, BLENDFUNCTION blendFunction);
  21. BOOL MyTransparentBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest,
  22.     int nWidthDest, int hHeightDest,
  23.     HDC hdcSrc, int nXOriginSrc, int nYOriginSrc,
  24.     int nWidthSrc, int nHeightSrc, UINT crTransparent);
  25. BOOL MySetLayeredWindowAttributes(HWND hwnd, COLORREF crKey,
  26.     BYTE bAlpha, DWORD dwFlags);
  27.  
  28. /* Statics */
  29.  
  30. static void InitMsimg32(void);
  31. static void InitUser32(void);
  32.  
  33. static HMODULE m_hmodMSIMG32 = NULL;
  34. static BOOL (WINAPI *m_pGradientFill)(HDC,PTRIVERTEX,ULONG,PVOID,ULONG, ULONG) = NULL;
  35. static BOOL (WINAPI *m_pAlphaBlend)(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION) = NULL;
  36. static BOOL (WINAPI *m_pTransparentBlt)(HDC,int,int,int,int,HDC,int,int,int,int,UINT) = NULL;
  37.  
  38. static HMODULE m_hmodUser32 = NULL;
  39. static BOOL (WINAPI *m_pSetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD) = NULL;
  40.  
  41. /*------------------------------------------------
  42.   free DLLs
  43. --------------------------------------------------*/
  44. void EndNewAPI(void)
  45. {
  46.     if(m_hmodMSIMG32 != NULL) FreeLibrary(m_hmodMSIMG32);
  47.     m_hmodMSIMG32 = NULL;
  48.     m_pGradientFill = NULL;
  49.     m_pAlphaBlend = NULL;
  50.     m_pTransparentBlt = NULL;
  51.     
  52.     if(m_hmodUser32 != NULL) FreeLibrary(m_hmodUser32);
  53.     m_hmodUser32 = NULL;
  54.     m_pSetLayeredWindowAttributes = NULL;
  55. }
  56.  
  57. /*------------------------------------------------
  58.   replacement of API GradientFill
  59. --------------------------------------------------*/
  60. BOOL MyGradientFill(HDC hdc, PTRIVERTEX pVertex, ULONG dwNumVertex,
  61.     PVOID pMesh, ULONG dwNumMesh, ULONG dwMode)
  62. {
  63.     if(m_hmodMSIMG32 == NULL) InitMsimg32();
  64.     
  65.     if(m_pGradientFill)
  66.         return m_pGradientFill(hdc, pVertex, dwNumVertex,
  67.             pMesh, dwNumMesh, dwMode);
  68.     else return FALSE;
  69. }
  70.  
  71. /*------------------------------------------------
  72.   replacement of API AlphaBlend
  73. --------------------------------------------------*/
  74. BOOL MyAlphaBlend(HDC hdcDest, int nXOriginDest, int nYOriginDest,
  75.     int nWidthDest, int nHeightDest,
  76.     HDC hdcSrc, int nXOriginSrc, int nYOriginSrc,
  77.     int nWidthSrc, int nHeightSrc, BLENDFUNCTION blendFunction)
  78. {
  79.     if(m_hmodMSIMG32 == NULL) InitMsimg32();
  80.     
  81.     if(m_pAlphaBlend)
  82.         return m_pAlphaBlend(hdcDest, nXOriginDest, nYOriginDest, 
  83.             nWidthDest, nHeightDest,
  84.             hdcSrc, nXOriginSrc, nYOriginSrc,
  85.             nWidthSrc, nHeightSrc, blendFunction);
  86.     else return FALSE;
  87. }
  88.  
  89. /*------------------------------------------------
  90.   replacement of API TransparentBlt
  91. --------------------------------------------------*/
  92. BOOL MyTransparentBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest,
  93.     int nWidthDest, int hHeightDest,
  94.     HDC hdcSrc, int nXOriginSrc, int nYOriginSrc,
  95.     int nWidthSrc, int nHeightSrc, UINT crTransparent)
  96. {
  97.     if(m_hmodMSIMG32 == NULL) InitMsimg32();
  98.     
  99.     if(m_pTransparentBlt)
  100.         return m_pTransparentBlt(hdcDest, nXOriginDest, nYOriginDest,
  101.             nWidthDest, hHeightDest,
  102.             hdcSrc, nXOriginSrc, nYOriginSrc,
  103.             nWidthSrc, nHeightSrc, crTransparent);
  104.     else return FALSE;
  105. }
  106.  
  107. /*------------------------------------------------
  108.   replacement of API SetLayeredWindowAttributes
  109. --------------------------------------------------*/
  110. BOOL MySetLayeredWindowAttributes(HWND hwnd, COLORREF crKey,
  111.     BYTE bAlpha, DWORD dwFlags)
  112. {
  113.     if(m_hmodUser32 == NULL) InitUser32();
  114.     
  115.     if(m_pSetLayeredWindowAttributes)
  116.         return m_pSetLayeredWindowAttributes(hwnd, crKey, 
  117.                 bAlpha, dwFlags);
  118.     else return FALSE;
  119. }
  120.  
  121. /*------------------------------------------------
  122.   load msimg32.dll
  123. --------------------------------------------------*/
  124. void InitMsimg32(void)
  125. {
  126.     if(m_hmodMSIMG32) return;
  127.     
  128.     m_hmodMSIMG32 = LoadLibrary("msimg32.dll");
  129.     if(m_hmodMSIMG32 != NULL)
  130.     {
  131.         (FARPROC)m_pGradientFill
  132.             = GetProcAddress(m_hmodMSIMG32, "GradientFill");
  133.         (FARPROC)m_pAlphaBlend
  134.             = GetProcAddress(m_hmodMSIMG32, "AlphaBlend");
  135.         (FARPROC)m_pTransparentBlt
  136.             = GetProcAddress(m_hmodMSIMG32, "TransparentBlt");
  137.     }
  138. }
  139.  
  140. /*------------------------------------------------
  141.   load user32.dll
  142. --------------------------------------------------*/
  143. void InitUser32(void)
  144. {
  145.     if(m_hmodUser32) return;
  146.     
  147.     m_hmodUser32 = LoadLibrary("user32.dll");
  148.     if(m_hmodUser32 != NULL)
  149.     {
  150.         (FARPROC)m_pSetLayeredWindowAttributes
  151.             = GetProcAddress(m_hmodUser32, "SetLayeredWindowAttributes");
  152.     }
  153. }
  154.  
  155.